It's Easier than You Think – Debugging and Optimizing CUDA with Intelligent Developer Tools

Mahender Hari

目录

  1. 议程
  2. 开发者工具生态系统
  3. IDE 和调试器

    1. IDE 和计算调试器
    2. Compute Sanitizer
  4. IDE 和调试器:新功能

    1. IDE 和计算调试器新特性
  5. NVTX Tools Extension API

    1. NVIDIA Tools eXtension (NVTX
    2. Python 和 NVTX
    3. NVIDIA SDK 和 NVTX:一个完整的生态系统
    4. NVTX 扩展负载 (Extended Payloads) & NVTX 计数器 (Counters
  6. Nsight Systems

    1. Nsight Systems - 系统性能分析器
    2. Nsight Systems 用户界面概览
    3. 关注区域的缩放与过滤
    4. Nsight Systems 新特性
    5. Grace CPU 性能分析
    6. Grace TopDown 分析
    7. Python 性能分析更新
    8. Nsight Analysis 改进
    9. Nsight 插件
  7. Nsight Compute

    1. Nsight Compute:内核性能分析器
    2. Nsight Compute GUI 界面
    3. 内存分析图表
    4. 源代码、PTX 和 SASS 分析
    5. Nsight Compute 新特性
    6. Blackwell Tensor Memory 支持
    7. Python 支持
    8. 附加功能
  8. CUPTI: CUDA Profiling Tools Interface

    1. CUPTI 更新
  9. 回顾重点领域

    1. 开发工具中的人工智能 (AI in DevTools
    2. 引入 Nsight Cloud
    3. 启用 Python 支持
  10. 附加资源

    1. 开发者工具视频系列
    2. GTC上的开发者工具相关活动

议程

page-0002.jpg
page-0002.jpg

本次演讲的议程安排如下:

NVIDIA开发者工具是一套强大的库、SDK和开发者工具,横跨桌面和移动平台,使开发者能够构建、调试、分析和部署利用加速计算硬件的软件。
更多信息请访问:https://developer.nvidia.com/tools-overview

开发者工具生态系统

page-0003.jpg
page-0003.jpg

NVIDIA的开发者工具生态系统涵盖了从开发到调试再到性能分析的整个流程:

IDE 和调试器

page-0004.jpg
page-0004.jpg

IDE 和计算调试器

在熟悉的环境中开发和调试 CUDA。

page-0005.jpg
page-0005.jpg

Compute Sanitizer

帮助识别 CUDA 应用程序中的风险。

page-0006.jpg
page-0006.jpg

Compute Sanitizer 包含多个工具,用于检测不同类型的错误:

文档: https://docs.nvidia.com/compute-sanitizer/
Github 示例: https://github.com/NVIDIA/compute-sanitizer-samples/

下图展示了 compute-sanitizer 运行 memcheck_demo 时的输出,它检测到了一个无效的全局内存写入操作,并提供了详细的错误信息,包括线程、块、地址和主机调用栈。

IDE 和调试器:新功能

page-0007.jpg
page-0007.jpg

IDE 和计算调试器新特性

在熟悉的环境中开发和调试 CUDA。

page-0008.jpg
page-0008.jpg

Compute Debugger
- 支持 FP4/FP6/FP8 格式。
- 提供跨发行版的构建,并带回 TUI shell。
- 支持在 Mobile Linux 和 WSL 上进行后期附加(late attach)。
- 通用后端(所有平台)和性能改进。

Compute Sanitizer
- 支持 Blackwell TCMM A 内存检查。
- Initcheck 现在也覆盖共享内存。
- 支持 Python 调用栈。
- 改进了堆栈可读性。

NVTX Tools Extension API

page-0009.jpg
page-0009.jpg

NVIDIA Tools eXtension (NVTX)

page-0010.jpg
page-0010.jpg

NVTX 允许开发者标注应用程序源代码,以便在使用调试、跟踪和性能分析工具时实现执行过程的可视化。

下图展示了 NVTX 标记在性能分析器时间轴上的可视化效果。

API 参考链接: https://nvidia.github.io/NVTX/doxygen/index.htmlhttps://nvidia.github.io/NVTX/doxygen-cpp/index.html

Python 和 NVTX

page-0011.jpg
page-0011.jpg

可以通过 pip install nvtx (https://pypi.org/project/nvtx/) 在 Python 中使用 NVTX。

import time
import nvtx

@nvtx.annotate(color="blue")
def my_function():
    for i in range(5):
        with nvtx.annotate("my_loop", color="red"):
            time.sleep(1)

博客文章: https://developer.nvidia.com/blog/nvidia-tools-extension-api-nvtx-annotation-tool-for-profiling-code-in-python-and-c-c/

NVIDIA SDK 和 NVTX:一个完整的生态系统

page-0012.jpg
page-0012.jpg

NVTX 是一个完整的生态系统的一部分,与众多 NVIDIA SDK 和库集成,包括:
- 深度学习框架 (DL Frameworks): PyTorch (with Layers), JAX + XLA, TensorFlow
- DeepStream SDK: Accel. GStreamer Plugins, GXF
- Holoscan SDK: GXF
- 数学库 (Math Libraries): cuSPARSE, cuSOLVER, cuBLAS
- 深度学习库 (Deep Learning Libraries): TensorRT, cuDLA
- 通信库 (Comm. Libraries): NVSHMEM, NCCL
- 其他库: cuFile, cuML, cuDF
- NVTX 库: C Headers, C++ wrapper, Python wrapper, 以及新支持的 Fortran wrapper 和 RUST wrapper。

NVTX 扩展负载 (Extended Payloads) & NVTX 计数器 (Counters)

利用 NVTX 和 Nsight Systems 实现更多功能。

page-0013.jpg
page-0013.jpg

下图展示了 Nsight Systems 视图,其中包含了 NVTX 计数器(如吞吐量)和带有扩展负载的事件。当鼠标悬停在一个事件上时,可以看到其附加的元数据,如序列号、读/写大小和自定义消息。

Nsight Systems

page-0014.jpg
page-0014.jpg

Nsight Systems - 系统性能分析器

page-0015.jpg
page-0015.jpg

主要特性:

文档/产品链接: https://developer.nvidia.com/nsight-systems

Nsight Systems 用户界面概览

Nsight Systems 的时间轴视图提供了对应用程序执行情况的全面可视化。

Nsight Systems 时间轴视图,展示了不同组件的性能数据
Page 16

关注区域的缩放与过滤

用户可以对时间轴进行缩放和过滤,以详细观察感兴趣的特定区域,从而进行更深入的性能分析。

通过缩放功能详细查看 Nsight Systems 时间轴上的特定事件
Page 17

Nsight Systems 新特性

幻灯片标题页:Nsight Systems 新特性
Page 18

Grace CPU 性能分析

Nsight Systems 现已支持对 Grace CPU 的硬件计数器和指标进行性能分析。

Grace CPU 在 Nsight Systems 中的性能分析时间轴视图
Page 19

Grace TopDown 分析

Nsight Systems 提供了 Grace CPU 的 TopDown 分析方法论,以指导性能优化。

Grace CPU TopDown 分析方法论指标界面
Page 20

Python 性能分析更新

Nsight Systems 增强了对 Python 应用程序的性能分析能力。

Nsight Systems 中 Python 代码的性能分析视图
Page 21

Nsight Analysis 改进

该工具用于处理和分析复杂的、大型的报告或报告集合。

Nsight Analysis 提供的多种可视化图表,用于识别性能趋势和瓶颈
Page 22

Nsight 插件

用户可以将自己的数据集成到 Nsight Systems 中。

Nsight 插件功能展示,将自定义数据(如文件系统操作和 RPC 延迟)集成到时间轴视图中
Page 23

Nsight Compute

幻灯片标题页:Nsight Compute
Page 24

Nsight Compute:内核性能分析器

Nsight Compute 是一个用于 CUDA 内核分析和调试的强大工具。

Nsight Compute 主要功能界面截图
Page 25

主要特性:
- 交互式/非交互式内核分析和 CUDA API 调试
- 内置的引导式分析系统:
- 提供性能优化建议和预估的加速效果。

Nsight Compute GUI 界面

Nsight Compute 的图形用户界面提供了详细的性能指标和引导式分析。

Nsight Compute GUI 界面概览
Page 26

内存分析图表

Nsight Compute 提供直观的内存层次结构图,以分析数据流和利用率。

Nsight Compute 的内存分析图表
Page 27

源代码、PTX 和 SASS 分析

Nsight Compute 能够将性能指标与源代码、PTX(并行线程执行)代码和 SASS(汇编代码)进行关联。

Nsight Compute 的源代码与性能指标关联视图
Page 28

Nsight Compute 新特性

幻灯片标题页:Nsight Compute 新特性
Page 29

Blackwell Tensor Memory 支持

Nsight Compute 增加了对 Blackwell 架构中新型 Tensor Memory 的分析支持。

Blackwell Tensor Memory 数据流和性能指标示意图
Page 30

Python 支持

Page 31: Python支持的特性展示,包括源代码视图和混合调用栈视图
Page 31: Python支持的特性展示,包括源代码视图和混合调用栈视图

附加功能

* 即将推出

Page 32: 改进的范围性能分析时间轴视图
Page 32: 改进的范围性能分析时间轴视图

CUPTI: CUDA Profiling Tools Interface

Page 33: CUPTI - CUDA性能分析工具接口 标题页
Page 33: CUPTI - CUDA性能分析工具接口 标题页

CUPTI 更新

Page 34: CUPTI API使用示例代码片段
Page 34: CUPTI API使用示例代码片段

回顾重点领域

Page 35: 章节标题页 - 回顾重点领域
Page 35: 章节标题页 - 回顾重点领域

开发工具中的人工智能 (AI in DevTools)

引入 Nsight Copilot

Nsight Copilot in Visual Studio Code
- 帮助用户编写和理解CUDA代码及概念。
- 提供自动补全和代码生成功能。

Nsight Copilot in Nsight Compute
- 帮助用户解答关于Nsight Compute使用、性能分析结果数据和性能优化的问题。
- 提供基于已收集数据的概念性CUDA知识的交互式聊天。

Page 36: Nsight Copilot在Visual Studio Code和Nsight Compute中的应用界面截图
Page 36: Nsight Copilot在Visual Studio Code和Nsight Compute中的应用界面截图

引入 Nsight Cloud

目标
- 提高Nsight工具的易用性:
- 减少对自定义调试构建/容器的需求。
- 简化从"n"个(1000s)节点收集的数据的分析和呈现。

组件

Page 37: Nsight Cloud架构图,展示了控制平面和集群中的工作节点如何协同工作
Page 37: Nsight Cloud架构图,展示了控制平面和集群中的工作节点如何协同工作

启用 Python 支持

Page 38: 在Nsight Systems中进行Python性能分析的示例,展示了Dask、PyTorch、NVTX和CUDA API的活动
Page 38: 在Nsight Systems中进行Python性能分析的示例,展示了Dask、PyTorch、NVTX和CUDA API的活动

附加资源

Page 39: 章节标题页 - 附加资源
Page 39: 章节标题页 - 附加资源

开发者工具视频系列

提供了一个YouTube播放列表,旨在帮助用户开始使用NVIDIA开发者工具进行CUDA开发。该系列视频将帮助用户提高使用工具的熟练度,并将示例应用到自己的开发环境中。内容涵盖分析性能报告、调试技巧以及优化CUDA代码的最佳实践,主要关注Nsight Compute和Nsight Systems。

视频列表包括:

  1. CUDA开发者工具 | Nsight工具生态系统简介
  2. CUDA开发者工具 | Nsight Systems简介
  3. CUDA开发者工具 | Nsight Compute简介
  4. CUDA开发者工具 | 使用NVIDIA Nsight Systems进行性能分析
  5. CUDA开发者工具 | 使用NVIDIA Nsight Compute进行SOL分析
  6. CUDA开发者工具 | 使用NVIDIA Nsight Compute进行内存分析
Page 40: CUDA开发者工具YouTube视频系列播放列表截图
Page 40: CUDA开发者工具YouTube视频系列播放列表截图

GTC上的开发者工具相关活动

会议 (Sessions)
- S72527: 比你想象的更容易——使用智能开发者工具调试和优化CUDA
- S72537: 优化多语言科学模拟:一个Grace超级芯片案例研究
- S72867: 面向加速计算的AI开发者工具——稀缺数据并不可怕
- S73224: 使用Nsight Graphics进行混合CUDA/Graphics应用程序的性能分析
- S72435: 探索面向加速计算应用开发的AI辅助开发者工具

实验 (Labs)
- DLI71670: 发现瓶颈——使用Nsight Systems优化AI管道
- DLI71640: AI及其他领域的内核优化——释放Nsight Compute的力量
- DLI72423: 精通Nsight:光线追踪应用的GPU性能分析
- DLI74509: Nsight分析系统:构建自定义Python分析脚本,以单节点和多节点应用揭示性能和瓶颈

与专家交流 (Connect with the Experts)
- CWE72393: 你的开发者工具箱里有什么?CUDA和图形性能分析、优化和调试工具
- CWE72433: CUDA开发者最佳实践
- CWE72456: 性能分析和优化
- CWE73338: 如何在NVIDIA Grace CPU上运行和优化你的工作负载

现场演示 (Live demos)
- 请访问NVIDIA展位的AI辅助开发者工具展台。

开发者工具是免费的,可在线获取,并包含在CUDA工具包中。

支持可通过以下方式获得:
https://forums.developer.nvidia.com/c/developer-tools

更多信息请访问:
https://developer.nvidia.com/tools-overview

Page 41: GTC上与开发者工具相关的会议、实验和专家交流活动列表
Page 41: GTC上与开发者工具相关的会议、实验和专家交流活动列表